Computer systems typically comprise a combination of hardware (such as semiconductors, transistors, chips, and circuit boards) and computer programs. As computers and the data they store have become more important, users have become increasingly intolerant of any interruption to the availability of the computers. To satisfy user requirements of high availability, computers may provide redundant components, so that in the event that one component fails or becomes unavailable, the computers switch automatically to using another component.
One high availability technique is called mirroring or check pointing, in which a primary computer periodically copies contents of its memory and processor state to a secondary computer. Mirroring involves tracking changes to the memory accessed by a partition and changes to the state of the processor on which the partition executes at the primary computer, periodically halting execution of the partition at the primary computer, sending the tracked changes over a network to the secondary computer, waiting for the secondary computer to acknowledge receipt of the tracked changes, and resuming execution of the halted partition. In the event of a failure of the primary computer, the secondary computer starts execution of the partition that was being executed by the primary computer, using the tracked changes and processor state, in a manner that is transparent to the applications that execute in the partition.